package com.icode.gulimall.product.service.impl;

import com.icode.gulimall.product.entity.SkuInfoEntity;
import com.icode.gulimall.product.service.SkuInfoService;
import com.icode.gulimall.product.vo.AttrValueWithSkuIdVo;
import com.icode.gulimall.product.vo.SkuItemSaleAttrVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.icode.common.utils.PageUtils;
import com.icode.common.utils.Query;

import com.icode.gulimall.product.dao.SkuSaleAttrValueDao;
import com.icode.gulimall.product.entity.SkuSaleAttrValueEntity;
import com.icode.gulimall.product.service.SkuSaleAttrValueService;


@Service("skuSaleAttrValueService")
public class SkuSaleAttrValueServiceImpl extends ServiceImpl<SkuSaleAttrValueDao, SkuSaleAttrValueEntity> implements SkuSaleAttrValueService {

    @Autowired
    SkuInfoService skuInfoService;

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<SkuSaleAttrValueEntity> page = this.page(
                new Query<SkuSaleAttrValueEntity>().getPage(params),
                new QueryWrapper<>()
        );

        return new PageUtils(page);
    }

    @Override
    public List<SkuItemSaleAttrVo> getSkuSaleAttrBySpuId(Long spuId) {

        SkuSaleAttrValueDao baseMapper = this.baseMapper;
        List<SkuItemSaleAttrVo> saleAttrVos = baseMapper.getSkuSaleAttrBySpuId(spuId);
        /*{
            Set<Long> skuSet = skuInfoService.list(new QueryWrapper<SkuInfoEntity>().eq("spu_id", spuId)).stream().map(in -> in.getSkuId()).collect(Collectors.toSet());
            List<SkuSaleAttrValueEntity> skuAttrInfo = this.list(new QueryWrapper<SkuSaleAttrValueEntity>().in("sku_id", skuSet));
            List<SkuItemSaleAttrVo> saleAttrVos = new ArrayList<>();
            for (Long aLong : skuSet) {
                SkuItemSaleAttrVo saleAttrVo = new SkuItemSaleAttrVo();
                List<AttrValueWithSkuIdVo> attrValues = new ArrayList<>();
                for (SkuSaleAttrValueEntity skuSaleAttrVal : skuAttrInfo) {
                    saleAttrVo.setAttrId(skuSaleAttrVal.getAttrId());
                    saleAttrVo.setAttrName(skuSaleAttrVal.getAttrName());
                    if (skuSaleAttrVal.getSkuId() == aLong) {
                        AttrValueWithSkuIdVo attrValueWithSkuIdVo = new AttrValueWithSkuIdVo();
                        attrValueWithSkuIdVo.setSkuIds("");
                        attrValueWithSkuIdVo.setAttrValue(skuSaleAttrVal.getAttrValue());
                        attrValues.add(attrValueWithSkuIdVo);
                    }
                }
                saleAttrVos.add(saleAttrVo);
            }
        }*/

        return saleAttrVos;
    }

    @Override
    public List<String> getSkuSaleValues(Long skuId) {
        // TODO 存在空指针问题
        List<String> stringList = this.list(new QueryWrapper<SkuSaleAttrValueEntity>().eq("sku_id", skuId))
                .stream()
                .map(item -> item.getAttrValue())
                .collect(Collectors.toList());
        return stringList;
    }


}